
<!DOCTYPE html
  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   <!--
This HTML was auto-generated from MATLAB code.
To make changes, update the MATLAB code and republish this document.
      --><title>chss2</title><meta name="generator" content="MATLAB 9.4"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2024-01-04"><meta name="DC.source" content="chss2.m"><style type="text/css">
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}

html { min-height:100%; margin-bottom:1px; }
html body { height:100%; margin:0px; font-family:Arial, Helvetica, sans-serif; font-size:10px; color:#000; line-height:140%; background:#fff none; overflow-y:scroll; }
html body td { vertical-align:top; text-align:left; }

h1 { padding:0px; margin:0px 0px 25px; font-family:Arial, Helvetica, sans-serif; font-size:1.5em; color:#d55000; line-height:100%; font-weight:normal; }
h2 { padding:0px; margin:0px 0px 8px; font-family:Arial, Helvetica, sans-serif; font-size:1.2em; color:#000; font-weight:bold; line-height:140%; border-bottom:1px solid #d6d4d4; display:block; }
h3 { padding:0px; margin:0px 0px 5px; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; color:#000; font-weight:bold; line-height:140%; }

a { color:#005fce; text-decoration:none; }
a:hover { color:#005fce; text-decoration:underline; }
a:visited { color:#004aa0; text-decoration:none; }

p { padding:0px; margin:0px 0px 20px; }
img { padding:0px; margin:0px 0px 20px; border:none; }
p img, pre img, tt img, li img, h1 img, h2 img { margin-bottom:0px; } 

ul { padding:0px; margin:0px 0px 20px 23px; list-style:square; }
ul li { padding:0px; margin:0px 0px 7px 0px; }
ul li ul { padding:5px 0px 0px; margin:0px 0px 7px 23px; }
ul li ol li { list-style:decimal; }
ol { padding:0px; margin:0px 0px 20px 0px; list-style:decimal; }
ol li { padding:0px; margin:0px 0px 7px 23px; list-style-type:decimal; }
ol li ol { padding:5px 0px 0px; margin:0px 0px 7px 0px; }
ol li ol li { list-style-type:lower-alpha; }
ol li ul { padding-top:7px; }
ol li ul li { list-style:square; }

.content { font-size:1.2em; line-height:140%; padding: 20px; }

pre, code { font-size:12px; }
tt { font-size: 1.2em; }
pre { margin:0px 0px 20px; }
pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
pre.error { color:red; }

@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }

span.keyword { color:#0000FF }
span.comment { color:#228B22 }
span.string { color:#A020F0 }
span.untermstring { color:#B20000 }
span.syscmd { color:#B28C00 }

.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
.footer p { margin:0px; }
.footer a { color:#878787; }
.footer a:hover { color:#878787; text-decoration:underline; }
.footer a:visited { color:#878787; }

table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }





  </style></head><body><div class="content"><h2>Contents</h2><div><ul><li><a href="#3">C&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1099; pw</a></li><li><a href="#4">Set general parameters</a></li><li><a href="#5">SSA- &#1072;&#1085;&#1072;&#1083;&#1080;&#1079; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</a></li><li><a href="#6">SSA time series</a></li><li><a href="#7">Estimation of the spw(:,j) reconstructed with the pair of RC</a></li><li><a href="#8">Compare reconstruction and original time series</a></li><li><a href="#10">&#1054;&#1094;&#1077;&#1085;&#1082;&#1072; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</a></li><li><a href="#11">&#1042;&#1080;&#1079;&#1091;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</a></li><li><a href="#12">&#1054;&#1075;&#1080;&#1073;&#1072;&#1102;&#1097;&#1072;&#1103; &#1087;&#1086; &#1082;&#1088;&#1080;&#1090;&#1077;&#1088;&#1080;&#1102; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1099;&#1093; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1086;&#1074; abs(acf_sET12)</a></li><li><a href="#13">&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; sET12 &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</a></li><li><a href="#14">&#1054;&#1094;&#1077;&#1085;&#1082;&#1080; &#1057;&#1055;&#1052; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1086;&#1074; pw</a></li><li><a href="#15">&#1042;&#1080;&#1079;&#1091;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1057;&#1055;&#1052; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1086;&#1074; pw</a></li><li><a href="#16">&#1054;&#1094;&#1077;&#1085;&#1082;&#1080; &#1089;&#1088;&#1077;&#1076;&#1085;&#1080;&#1093; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</a></li><li><a href="#17">&#1040;&#1075;&#1088;&#1077;&#1075;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099; cpw</a></li><li><a href="#18">&#1053;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072; cpw</a></li><li><a href="#19">&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1080; &#1101;&#1085;&#1077;&#1088;&#1075;&#1080;&#1103; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099;</a></li></ul></div><pre class="codeinput"><span class="keyword">function</span> chss2(pw, Path, Name)
</pre><pre class="codeinput"><span class="comment">%     dt=1/30;     % &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1081; &#1076;&#1080;&#1089;&#1082;&#1088;&#1077;&#1090;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080;</span>
    fmin=0.15; <span class="comment">% &#1085;&#1080;&#1078;&#1085;&#1103;&#1103; &#1075;&#1088;&#1072;&#1085;&#1080;&#1094;&#1072; - &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1085;&#1099;&#1081; &#1076;&#1080;&#1072;&#1087;&#1072;&#1079;&#1086;&#1085; &#1076;&#1099;&#1093;&#1072;&#1090;&#1077;&#1083;&#1100;&#1085;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099;</span>
    dt=1/30;     <span class="comment">% &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1085;&#1086;&#1081; &#1076;&#1080;&#1089;&#1082;&#1088;&#1077;&#1090;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080;</span>
    Nmed=1/(dt*fmin); <span class="comment">% &#1072;&#1087;&#1077;&#1088;&#1090;&#1091;&#1088;&#1072; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072;</span>
    PathHR=Path+replace(Name,<span class="string">"_nc"</span>,<span class="string">""</span>)+<span class="string">"_rPPG_output.csv"</span>;
    hr = LoadHR(PathHR);
    <span class="comment">% PathHR=Path+replace(Name,"_nc","")+"_Mobi_RR-intervals.rr";</span>
    <span class="comment">% hr = LoadRR(PathHR);</span>
</pre><pre class="codeoutput error">Not enough input arguments.

Error in chss2 (line 6)
    PathHR=Path+replace(Name,"_nc","")+"_rPPG_output.csv";
</pre><h2 id="3">C&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1099; pw</h2><pre class="codeinput">    N   = length(pw); <span class="comment">% &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1086;&#1074; pw</span>
    win = 1024;
    res = N-win*floor(N/win);
    nPart = 20; <span class="comment">% &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1076;&#1086;&#1083;&#1077;&#1081; res</span>
    res = floor(res/nPart); overlap = (win-res)/win;
    S = 1; Imin = 1; Imax = win;
    <span class="keyword">while</span> Imax&lt;=N
        ns(S) = S; <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1090;&#1077;&#1082;&#1091;&#1097;&#1077;&#1075;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072; pw</span>
        Imin  = Imin+res;
        Imax  = Imax+res;
        S     = S+1;
    <span class="keyword">end</span>
    S = S-1; <span class="comment">% &#1082;&#1086;&#1083;-&#1074;&#1086; &#1087;&#1077;&#1088;&#1077;&#1082;&#1088;&#1099;&#1074;&#1072;&#1102;&#1097;&#1080;&#1093;&#1089;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw &#1074; &#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1072;&#1093; N</span>
    NSF = win+res*(S-1); <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1092;&#1080;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1072; &#1092;&#1080;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072; &lt;= N</span>
    <span class="keyword">for</span> j=1:S
        <span class="keyword">for</span> i=1:win
            k = (j-1)*res;
            spw(i,j) = pw(k+i); <span class="comment">% &#1090;&#1077;&#1082;&#1091;&#1097;&#1080;&#1081; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090; pw &#1076;&#1083;&#1080;&#1085;&#1085;&#1086;&#1102; win</span>
        <span class="keyword">end</span>
    <span class="keyword">end</span>
</pre><h2 id="4">Set general parameters</h2><pre class="codeinput">    cad = 30;      <span class="comment">% 30 &#1082;&#1072;&#1076;&#1088;&#1086;&#1074;/&#1089;&#1077;&#1082;</span>
    dt  = 1.0/cad; <span class="comment">% &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1076;&#1080;&#1089;&#1082;&#1088;&#1077;&#1090;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1074;&#1088;&#1077;&#1084;&#1077;&#1085;&#1080;, &#1089;&#1077;&#1082;</span>
    tim(1) = 0.0;
    <span class="keyword">for</span> i=2:N
        tim(i) = tim(i-1)+dt; <span class="comment">% &#1074;&#1088;&#1077;&#1084;&#1103; &#1074; &#1089;&#1077;&#1082;&#1091;&#1085;&#1076;&#1072;&#1093;</span>
    <span class="keyword">end</span>
    <span class="comment">% tim = tim';</span>
    ns  = (1:S)'; <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088;&#1072; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</span>
    <span class="comment">% fmp=zeros(S,1);</span>
    <span class="keyword">for</span> j=1:S <span class="comment">% &#1094;&#1080;&#1082;&#1083; &#1087;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;&#1084; pw</span>
        <span class="comment">%    L(j) = floor(cad/fmp(j)); % &#1082;&#1086;&#1083;-&#1074;&#1086; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1086;&#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; pw</span>
        L(j) = floor(cad/1.5); <span class="comment">% &#1082;&#1086;&#1083;-&#1074;&#1086; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1086;&#1074; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; pw</span>
    <span class="keyword">end</span>
    L = L';
    K = 5; <span class="comment">% &#1082;&#1086;&#1083;-&#1074;&#1086; &#1087;&#1077;&#1088;&#1080;&#1086;&#1076;&#1086;&#1074; &#1076;&#1083;&#1103; &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088;&#1072; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103;</span>
    M = K*max(L); <span class="comment">% &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1074; &#1090;&#1088;&#1072;&#1077;&#1082;&#1090;&#1086;&#1088;&#1085;&#1086;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1088;&#1072;&#1085;&#1089;&#1090;&#1074;&#1086;</span>
</pre><h2 id="5">SSA- &#1072;&#1085;&#1072;&#1083;&#1080;&#1079; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</h2><pre class="codeinput">    nET = 4;   <span class="comment">% &#1082;&#1086;&#1083;-&#1074;&#1086; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</span>
    <span class="keyword">for</span> j=1:S  <span class="comment">% &#1094;&#1080;&#1082;&#1083; &#1087;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;&#1084;</span>
</pre><h2 id="6">SSA time series</h2><pre>  M = K*L(j); % &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1074;&#1083;&#1086;&#1078;&#1077;&#1085;&#1080;&#1103; &#1074; &#1090;&#1088;&#1072;&#1077;&#1082;&#1090;&#1086;&#1088;&#1085;&#1086;&#1077; &#1087;&#1088;&#1086;&#1089;&#1090;&#1088;&#1072;&#1085;&#1089;&#1090;&#1074;&#1086;</pre><pre class="codeinput">        [C,LBD,RC] = SSA(win,M,spw(:,j),nET);
</pre><h2 id="7">Estimation of the spw(:,j) reconstructed with the pair of RC</h2><pre class="codeinput">        sET12(:,j) = sum(RC(:,1:2),2);
        <span class="comment">%    sET34(:,j) = sum(RC(:,3:4),2);</span>
</pre><h2 id="8">Compare reconstruction and original time series</h2><pre class="codeinput">        <span class="keyword">if</span> j==100 <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072; pw &#1076;&#1083;&#1103; &#1074;&#1080;&#1079;&#1091;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080;</span>
            figure(<span class="string">'name'</span>,<span class="string">'Covariance matrix'</span>); clf;
            imagesc(C); axis <span class="string">square</span>; set(gca,<span class="string">'clim'</span>,[-1 1]); colorbar;
            figure(<span class="string">'name'</span>,<span class="string">'Eigenvalues'</span>); clf; plot(LBD,<span class="string">'o-'</span>);
            figure(<span class="string">'name'</span>,<span class="string">'Original time series and reconstruction'</span>); clf;
            plot(tim(1:win),spw(:,j),<span class="string">'b-'</span>,tim(1:win),sET12(:,j),<span class="string">'r-'</span>);
            legend(<span class="string">'Original'</span>,<span class="string">'sET12'</span>); xlabel(<span class="string">"t,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"sET"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
        <span class="keyword">end</span>
</pre><pre class="codeinput">    <span class="keyword">end</span>
</pre><h2 id="10">&#1054;&#1094;&#1077;&#1085;&#1082;&#1072; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</h2><pre class="codeinput">    lag  = floor(win/10); <span class="comment">% &#1085;&#1072;&#1080;&#1073;&#1086;&#1083;&#1100;&#1096;&#1080;&#1081; &#1083;&#1072;&#1075; &#1040;&#1050;&#1060; &lt;= win/10</span>
    lagS = 2*lag;
    <span class="keyword">for</span> j=1:S
        Acf_sET12(:,j) = AcfMed(lagS,win,sET12(:,j)); <span class="comment">% &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1040;&#1050;&#1060; j-&#1075;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;</span>
        <span class="comment">%    Acf_sET12(:,j) = autocorr(sET12(:,j),'NumLags',lag); % &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1072;&#1103; &#1040;&#1050;&#1060; j-&#1075;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;</span>
    <span class="keyword">end</span>
</pre><h2 id="11">&#1042;&#1080;&#1079;&#1091;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</h2><pre class="codeinput">    lgl = 1:lag; <span class="comment">% &#1089;&#1077;&#1090;&#1082;&#1072; 3D-&#1075;&#1088;&#1072;&#1092;&#1080;&#1082;&#1072; &#1040;&#1050;&#1060;</span>
    Time=0:dt:lag*dt-dt;
    figure(<span class="string">'name'</span>,<span class="string">'&#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; sET12 &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw'</span>); clf;
    <span class="comment">% mesh(ns,lgl,Acf_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;</span>
    <span class="comment">% xlabel("ns",'interp','none'); ylabel("lag",'interp','none');</span>
    mesh(ns,Time,Acf_sET12(1:lag,:),<span class="string">'FaceAlpha'</span>,0.5,<span class="string">'FaceColor'</span>,<span class="string">'flat'</span>); colorbar;
    xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"lag,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    zlabel(<span class="string">"Acf"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); grid <span class="string">on</span>;
</pre><h2 id="12">&#1054;&#1075;&#1080;&#1073;&#1072;&#1102;&#1097;&#1072;&#1103; &#1087;&#1086; &#1082;&#1088;&#1080;&#1090;&#1077;&#1088;&#1080;&#1102; &#1083;&#1086;&#1082;&#1072;&#1083;&#1100;&#1085;&#1099;&#1093; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1086;&#1074; abs(acf_sET12)</h2><pre class="codeinput">    <span class="keyword">for</span> j=1:S <span class="comment">% &#1094;&#1080;&#1082;&#1083; &#1087;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;&#1084; &#1040;&#1050;&#1060;</span>
        absTS = abs(Acf_sET12(:,j));
        AT1   = absTS(1);
        AT2   = absTS(2);
        maxTS = zeros(lag,1); maxTS(1) = AT1;
        maxN  = zeros(lag,1); maxN(1)  = 1;
        Nmax = 1;
        <span class="keyword">for</span> m=3:lag
            AT3 = absTS(m);
            <span class="keyword">if</span> (AT1&lt;=AT2)&amp;&amp;(AT2&gt;=AT3)
                Nmax = Nmax+1; <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1085;&#1086;&#1075;&#1086; &#1091;&#1079;&#1083;&#1072; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080; (&#1089;&#1095;&#1077;&#1090;&#1095;&#1080;&#1082; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1086;&#1074;)</span>
                maxN(Nmax) = m-1; <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1085;&#1086;&#1075;&#1086; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1072; &#1076;&#1083;&#1103; &#1088;&#1103;&#1076;&#1072; absTS</span>
                maxTS(Nmax) = AT2; <span class="comment">% &#1086;&#1090;&#1089;&#1095;&#1077;&#1090; &#1086;&#1095;&#1077;&#1088;&#1077;&#1076;&#1085;&#1086;&#1075;&#1086; &#1091;&#1079;&#1083;&#1072; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080;</span>
            <span class="keyword">end</span>
            AT1 = AT2;
            AT2 = AT3;
        <span class="keyword">end</span>
        Nmax = Nmax+1; <span class="comment">% &#1082;&#1086;&#1083;&#1080;&#1095;&#1077;&#1089;&#1090;&#1074;&#1086; &#1091;&#1079;&#1083;&#1086;&#1074; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080;</span>
        maxN(Nmax)  = lag; <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1072; absTS &#1092;&#1080;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1091;&#1079;&#1083;&#1072; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080;</span>
        maxTS(Nmax) = absTS(lag); <span class="comment">% &#1086;&#1090;&#1089;&#1095;&#1077;&#1090; absTS &#1092;&#1080;&#1085;&#1072;&#1083;&#1100;&#1085;&#1086;&#1075;&#1086; &#1091;&#1079;&#1083;&#1072; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080;</span>
        NumMax = maxN(1:Nmax); <span class="comment">% &#1085;&#1086;&#1084;&#1077;&#1088;&#1072; &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1086;&#1074; &#1042;&#1056; absTS</span>
        <span class="comment">% &#1048;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1103; &#1086;&#1075;&#1080;&#1073;&#1072;&#1102;&#1097;&#1077;&#1081; &#1040;&#1050;&#1060;</span>
        <span class="comment">% 'pchip','cubic','v5cubic','makima','spline'</span>
        EnvAcf_sET12(:,j) = interp1(NumMax,maxTS(1:Nmax),lgl,<span class="string">'pchip'</span>);
        AcfNrm_sET12(:,j) = Acf_sET12(1:lag,j)./EnvAcf_sET12(:,j); <span class="comment">% &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1040;&#1050;&#1060;</span>
    <span class="keyword">end</span>
    figure(<span class="string">'name'</span>,<span class="string">'&#1053;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1099;&#1077; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; sET12 &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw'</span>); clf;
    <span class="comment">% mesh(ns,lgl,AcfNrm_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;</span>
    <span class="comment">% xlabel("ns",'interp','none'); ylabel("lag",'interp','none');</span>
    mesh(ns,Time,AcfNrm_sET12(1:lag,:),<span class="string">'FaceAlpha'</span>,0.5,<span class="string">'FaceColor'</span>,<span class="string">'flat'</span>); colorbar;
    xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"lag,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    zlabel(<span class="string">"Acf_Nrm"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); grid <span class="string">on</span>;
</pre><h2 id="13">&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1085;&#1086;&#1081; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; sET12 &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</h2><pre class="codeinput">    pi2 = 2.0*pi;
    <span class="keyword">for</span> j=1:S <span class="comment">% &#1094;&#1080;&#1082;&#1083; &#1087;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072;&#1084; &#1040;&#1050;&#1060;</span>
        PhaAcfNrm = abs(acos(AcfNrm_sET12(:,j))); <span class="comment">% &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072;</span>
        pAcf = pchip(lgl,PhaAcfNrm); <span class="comment">% &#1082;&#1086;&#1101;&#1092;&#1092;&#1080;&#1094;&#1080;&#1077;&#1085;&#1090;&#1099; &#1080;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1085;&#1090;&#1072; pchip</span>
        <span class="keyword">for</span> m=2:lag
            FrcAcfNrm(m) = abs(pAcf.coefs(m-1,3))/pi2/dt; <span class="comment">% &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;-&#1086;&#1081; &#1040;&#1050;&#1060;, &#1043;&#1094;</span>
        <span class="keyword">end</span>
        FrcAcfNrm(1) = FrcAcfNrm(2);
        <span class="comment">%    FrcAcfNrm = abs(diff(PhaAcfNrm))/pi2/dt; % &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;&#1086;&#1074;-&#1086;&#1081; &#1040;&#1050;&#1060;, &#1043;&#1094;</span>
        insFrc_AcfNrm(j) = median(FrcAcfNrm); <span class="comment">% &#1089;&#1088;&#1077;&#1076;&#1085;&#1103;&#1103; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1090;&#1072; j-&#1075;&#1086; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1072; pw</span>
    <span class="keyword">end</span>

    disp(<span class="string">"&#1040;&#1087;&#1077;&#1088;&#1090;&#1091;&#1088;&#1072; &#1092;&#1080;&#1083;&#1100;&#1090;&#1088;&#1072; &#1076;&#1083;&#1103; insFrc_AcfNrm: "</span> + Nmed);
<span class="comment">%     insFrc_AcfNrm=medfilt1(insFrc_AcfNrm, 5);</span>

    smo_insFrc_AcfNrm = smoothdata(insFrc_AcfNrm, <span class="string">'rloess'</span>, 0.25*S); <span class="comment">% smo_insFrc_AcfNrm = smooth(insFrc_AcfNrm,0.25*S,'rlowess');</span>
    figure(<span class="string">'name'</span>,<span class="string">'&#1063;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;-&#1086;&#1081; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;-&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw'</span>,<span class="string">'Position'</span>, [0 0 1400 800]); clf;
<span class="comment">%             insFrc_AcfNrm=medfilt1(insFrc_AcfNrm,Nmed);</span>

<span class="comment">%     p1 = plot(ns,insFrc_AcfNrm,'b','LineWidth',0.8); hold on;</span>
<span class="comment">%     plot(ns,smo_insFrc_AcfNrm,'r','LineWidth',0.8); grid on;</span>
<span class="comment">%     xlabel("ns",'interp','none'); ylabel("insFrc_AcfNrm,Hz",'interp','none');</span>
<span class="comment">%     title("&#1063;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;-&#1086;&#1081; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;-&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw");</span>
<span class="comment">% %     legend(p1,'sET12');</span>
<span class="comment">%     if length(hr)&gt;100</span>
<span class="comment">%         ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';</span>
<span class="comment">%         % yyaxis right;</span>
<span class="comment">%         plot(ns_hr,hr./60,'black'); ylabel("HR[bpm]",'interp','none');</span>
<span class="comment">%         % legend(p1,'insFrc_AcfNrm','rloess','HR[bpm]');</span>
<span class="comment">%         hr_med=medfilt1(hr,Nmed*5);</span>
<span class="comment">%         hr_diff_med=hr-hr_med;</span>
<span class="comment">%         plot(ns_hr,hr_med./60,'cyan--');</span>
<span class="comment">%         plot(ns_hr,hr_diff_med./60,'magenta'); %ylabel("HR[bpm]",'interp','none');</span>
<span class="comment">%         legend('insFrc AcfNrm','rloess','HR','HR[medfilt]','HR[HR-medfilt1]')</span>
<span class="comment">%     end</span>
    <span class="comment">%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</span>
    subplot(1,3,[1 2]);
    plot(ns,insFrc_AcfNrm,<span class="string">'b'</span>,<span class="string">'LineWidth'</span>,0.8); hold <span class="string">on</span>;
    plot(ns,smo_insFrc_AcfNrm,<span class="string">'r'</span>,<span class="string">'LineWidth'</span>,0.8); grid <span class="string">on</span>;
    xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"insFrc_AcfNrm,Hz"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    title(<span class="string">"&#1063;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099; &#1085;&#1086;&#1088;&#1084;&#1080;&#1088;-&#1086;&#1081; &#1040;&#1050;&#1060; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;-&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw"</span>);
<span class="comment">%     legend(p1,'sET12');</span>
    <span class="keyword">if</span> length(hr)&gt;100
        ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';
        <span class="comment">% yyaxis right;</span>
        plot(ns_hr,hr./60,<span class="string">'black'</span>); ylabel(<span class="string">"HR[bpm]"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
        <span class="comment">% legend(p1,'insFrc_AcfNrm','rloess','HR[bpm]');</span>
        hr_med=medfilt1(hr,Nmed*5);
        hr_diff_med=hr-hr_med;
        plot(ns_hr,hr_med./60,<span class="string">'cyan--'</span>);

        legend(<span class="string">'insFrc AcfNrm'</span>,<span class="string">'rloess'</span>,<span class="string">'HR'</span>,<span class="string">'HR[medfilt]'</span>);



    subplot(1,3,3);
<span class="comment">%             [outs, lower_prct, upper_prct] =</span>
            RaznFilter(insFrc_AcfNrm, [1 99]);
<span class="comment">%         plot((insFrc_AcfNrm-medfilt1(insFrc_AcfNrm, 5)),'black--'); hold on;</span>
<span class="comment">%         plot(rmoutliers_emulated(insFrc_AcfNrm, [10 90])./60,'red');</span>
<span class="comment">%         plot(filloutliers(insFrc_AcfNrm,"next")./60,'red');</span>

<span class="comment">%         plot(outs, 'blue');</span>
<span class="comment">%         line('XData', [0 200], 'YData', [lower_prct lower_prct], 'Color','red','LineStyle','--');</span>
<span class="comment">%         line('XData', [0 200], 'YData', [upper_prct upper_prct],'Color','red','LineStyle','--');</span>


        ylabel(<span class="string">"Hz"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); title(<span class="string">"&#1055;&#1077;&#1088;&#1074;&#1072;&#1103; &#1088;&#1072;&#1079;&#1085;&#1086;&#1089;&#1090;&#1100;"</span>); grid <span class="string">on</span>;
        legend(<span class="string">'&#1055;&#1077;&#1088;&#1074;&#1072;&#1103; &#1088;&#1072;&#1079;&#1085;&#1086;&#1089;&#1090;&#1100;'</span>,<span class="string">'down'</span>,<span class="string">'up'</span>,<span class="string">'&#1048;&#1085;&#1090;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1103;'</span>, <span class="string">'Location'</span>, <span class="string">'east'</span>);

<span class="comment">%         &#1088;&#1072;&#1079;&#1085;&#1086;&#1089;&#1090;&#1100; &#1087;&#1086; &#1080;&#1089;&#1093;&#1086;&#1076;&#1085;&#1099;&#1084; &#1076;&#1072;&#1085;&#1085;&#1099;&#1084; &#1082;&#1086;&#1085;&#1090;&#1072;&#1082;&#1090;&#1085;&#1086;&#1075;&#1086; &#1089;&#1087;&#1086;&#1089;&#1086;&#1073;&#1072; &#1086;&#1087;&#1088;&#1077;&#1076;&#1077;&#1083;&#1077;&#1085;&#1080;&#1103;</span>
<span class="comment">%         plot(ns_hr,hr_diff_med./60,'magenta'); %ylabel("HR[bpm]",'interp','none');</span>
<span class="comment">%         legend('HR[HR-medfilt1]');  ylabel("HR[bpm]",'interp','none'); xlabel("ns",'interp','none'); grid on;</span>
    <span class="keyword">end</span>
</pre><h2 id="14">&#1054;&#1094;&#1077;&#1085;&#1082;&#1080; &#1057;&#1055;&#1052; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1076;&#1083;&#1103; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1086;&#1074; pw</h2><pre class="codeinput">    smopto = 3; <span class="comment">% &#1087;&#1072;&#1088;&#1072;&#1084;&#1077;&#1090;&#1088; &#1089;&#1075;&#1083;&#1072;&#1078;&#1080;&#1074;&#1072;&#1085;&#1080;&#1103; &#1087;&#1077;&#1088;&#1080;&#1086;&#1076;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1099; &#1058;&#1086;&#1084;&#1089;&#1086;&#1085;&#1072;</span>
    <span class="keyword">for</span> j=1:S
        <span class="comment">%    disp(spw(:,j));</span>
        pto_sET12(:,j) = periodogram(spw(:,j),blackmanharris(win),win); <span class="comment">% &#1041;&#1083;&#1101;&#1082;&#1084;&#1072;&#1085;&#1072;-&#1061;&#1072;&#1088;&#1088;&#1080;&#1089;&#1072;</span>
        pto_sET12(:,j) = pmtm(sET12(:,j),smopto,win); <span class="comment">% &#1087;&#1077;&#1088;&#1080;&#1086;&#1076;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1072; &#1058;&#1086;&#1084;&#1089;&#1086;&#1085;&#1072;</span>
    <span class="keyword">end</span>
</pre><h2 id="15">&#1042;&#1080;&#1079;&#1091;&#1072;&#1083;&#1080;&#1079;&#1072;&#1094;&#1080;&#1103; &#1057;&#1055;&#1052; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1086;&#1074; pw</h2><pre class="codeinput">    fmi  = 40.0/60.0;   <span class="comment">% &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1089;&#1088;&#1077;&#1079;&#1072; &#1076;&#1083;&#1103; 40 &#1091;&#1076;/&#1084;&#1080;&#1085; (0.6667 &#1043;&#1094;)</span>
    fma  = 240.0/60.0;  <span class="comment">% &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1089;&#1088;&#1077;&#1079;&#1072; &#1076;&#1083;&#1103; 240 &#1091;&#1076;/&#1084;&#1080;&#1085; (4.0 &#1043;&#1094;)</span>
    Nf   = 1+win/2;     <span class="comment">% &#1082;&#1086;&#1083;-&#1074;&#1086; &#1086;&#1090;&#1089;&#1095;&#1077;&#1090;&#1086;&#1074; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099;</span>
    df   = cad/(win-1); <span class="comment">% &#1080;&#1085;&#1090;&#1077;&#1088;&#1074;&#1072;&#1083; &#1076;&#1080;&#1089;&#1082;&#1088;&#1077;&#1090;&#1080;&#1079;&#1072;&#1094;&#1080;&#1080; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099;, &#1043;&#1094;</span>
    Fmin = fmi-10*df; Fmax = fma+10*df; <span class="comment">% &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1074; &#1043;&#1094;</span>
    f(1) = 0.0;
    <span class="keyword">for</span> i=2:Nf
        f(i) = f(i-1)+df; <span class="comment">% &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1074; &#1075;&#1077;&#1088;&#1094;&#1072;&#1093;</span>
        <span class="keyword">if</span> abs(f(i)-Fmin)&lt;=df
            iGmin = i;
        <span class="keyword">end</span>
        <span class="keyword">if</span> abs(f(i)-Fmax)&lt;=df
            iGmax = i;
        <span class="keyword">end</span>
    <span class="keyword">end</span>
    <span class="keyword">for</span> i=1:iGmax
        fG(i) = f(i); <span class="comment">% &#1089;&#1077;&#1090;&#1082;&#1072; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090; 3D-&#1075;&#1088;&#1072;&#1092;&#1080;&#1082;&#1072;</span>
    <span class="keyword">end</span>
    f = f';
    figure(<span class="string">'name'</span>,<span class="string">'&#1055;&#1077;&#1088;&#1080;&#1086;&#1076;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1072; &#1058;&#1086;&#1084;&#1089;&#1086;&#1085;&#1072; sET12 &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw'</span>); clf;
    mesh(ns,fG(iGmin:iGmax),pto_sET12(iGmin:iGmax,:),<span class="string">'FaceAlpha'</span>,0.5,<span class="string">'FaceColor'</span>,<span class="string">'flat'</span>);
    colorbar; grid <span class="string">on</span>;
    xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"f,Hz"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); zlabel(<span class="string">"P(f)"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
</pre><h2 id="16">&#1054;&#1094;&#1077;&#1085;&#1082;&#1080; &#1089;&#1088;&#1077;&#1076;&#1085;&#1080;&#1093; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; &#1089;&#1080;&#1085;&#1075;&#1091;&#1083;&#1103;&#1088;&#1085;&#1099;&#1093; &#1090;&#1088;&#1086;&#1077;&#1082; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw</h2><pre class="codeinput">    <span class="keyword">for</span> j=1:S
        [B,I] = sort(pto_sET12(:,j),<span class="string">'descend'</span>);
        pto_fMAX12(j) = f(I(1)); <span class="comment">% I(1) - &#1080;&#1085;&#1076;&#1077;&#1082;&#1089; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099;(&#1043;&#1094;) &#1084;&#1072;&#1082;&#1089;&#1080;&#1084;&#1091;&#1084;&#1072; pto_sET12(:,j)</span>
    <span class="keyword">end</span>
    pto_fMAX12 = pto_fMAX12';
    smo_pto_fMAX12 = smoothdata(pto_fMAX12,<span class="string">'rloess'</span>,0.3*S);
    <span class="comment">% smo_pto_fMAX12 = smooth(pto_fMAX12,0.3*S,'rloess');</span>
    figure(<span class="string">'name'</span>,<span class="string">'&#1063;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; sET &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw'</span>,<span class="string">'Position'</span>, [800 0 800 600]); clf;
<span class="comment">%             pto_fMAX12=medfilt1(pto_fMAX12,Nmed);</span>
    p=plot(ns,pto_fMAX12,<span class="string">'b'</span>); hold <span class="string">on</span>;
    plot(ns,smo_pto_fMAX12,<span class="string">'r'</span>,<span class="string">'LineWidth'</span>,0.8); grid <span class="string">on</span>;
    xlabel(<span class="string">"ns"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"fMAX,Hz"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    title(<span class="string">"&#1063;&#1072;&#1089;&#1090;&#1086;&#1090;&#1099; &#1086;&#1089;&#1085;&#1086;&#1074;&#1085;&#1086;&#1075;&#1086; &#1090;&#1086;&#1085;&#1072; sET &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; pw"</span>);
    <span class="keyword">if</span> length(hr)&gt;100
        ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';
        <span class="comment">% yyaxis right;</span>
        plot(ns_hr,hr./60,<span class="string">'black'</span>); ylabel(<span class="string">"HR[bpm]"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
        <span class="comment">% legend(p,'pto_fMAX12','rloess','HR[bpm]');</span>
        hr_med=medfilt1(hr,Nmed*5);
        hr_diff_med=hr-hr_med;
        plot(ns_hr,hr_med./60,<span class="string">'cyan--'</span>);
        plot(ns_hr,hr_diff_med./60,<span class="string">'magenta'</span>); <span class="comment">%ylabel("HR[bpm]",'interp','none');</span>
        legend(<span class="string">'pto sET12'</span>,<span class="string">'smoothdata'</span>,<span class="string">'HR[bpm]'</span>,<span class="string">'medfilt1'</span>,<span class="string">'hr-medfilt1'</span>)
    <span class="keyword">end</span>
    saveas(p,Path+Name+<span class="string">'_&#1063;&#1057;&#1057;_sET.png'</span>);
</pre><h2 id="17">&#1040;&#1075;&#1088;&#1077;&#1075;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1089;&#1077;&#1075;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099; cpw</h2><pre class="codeinput">    [NumS,cpw_avr,cpw_med,cpw_iqr] = wav(NSF,S,win,res,sET12);
    <span class="comment">% figure('name','Pulse wave'); clf;</span>
    <span class="comment">% plotwave(1,NSF,tim,cpw_avr,cpw_med,cpw_iqr);</span>
</pre><h2 id="18">&#1053;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072; cpw</h2><p>cpw = cpw_avr; % &#1086;&#1094;&#1077;&#1085;&#1082;&#1072; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099;</p><pre class="codeinput">    cpw = cpw_med; <span class="comment">% &#1086;&#1094;&#1077;&#1085;&#1082;&#1072; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099;</span>
    cutoff = pi; pi2 = 2.0*pi;
    H_cpw = hilbert(cpw);
    insE_cpw = abs(H_cpw); <span class="comment">% &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1086;&#1075;&#1080;&#1073;&#1072;&#1102;&#1097;&#1072;&#1103;</span>
    unwPha = unwrap(angle(H_cpw),cutoff); <span class="comment">% &#1085;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072;</span>
    <span class="comment">% &#1053;&#1077;&#1087;&#1088;&#1077;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103;-(&#1089;) &#1080; &#1088;&#1072;&#1079;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103;-(d) &#1082;&#1086;&#1084;&#1087;&#1086;&#1085;&#1077;&#1085;&#1090;&#1099; &#1085;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1086;&#1081; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1086;&#1081; &#1092;&#1072;&#1079;&#1099;</span>
    unwPc_cpw(1) = unwPha(1); unwPd_cpw(1) = 0.0;
    <span class="keyword">for</span> i=2:NSF
        dif = unwPha(i)-unwPha(i-1);
        unwPc_cpw(i) = unwPc_cpw(i-1); <span class="comment">% &#1085;&#1077;&#1087;&#1088;&#1077;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103;</span>
        unwPd_cpw(i) = unwPd_cpw(i-1); <span class="comment">% &#1088;&#1072;&#1079;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103;</span>
        <span class="keyword">if</span> dif&gt;=0.0
            unwPc_cpw(i) = unwPc_cpw(i)+dif;
        <span class="keyword">else</span>
            unwPd_cpw(i) = unwPd_cpw(i)+dif+pi2;
        <span class="keyword">end</span>
    <span class="keyword">end</span>
    unwPc_cpw = unwPc_cpw'; unwPd_cpw = unwPd_cpw';
    figure(<span class="string">'name'</span>,<span class="string">'Unwrape phase pulse wave'</span>); clf;
    sp1 = subplot(2,1,1); plot(tim(1:NSF),unwPc_cpw); grid <span class="string">on</span>;
    xlabel(<span class="string">"t,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"Phase cont"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    title(sp1,<span class="string">'&#1053;&#1077;&#1087;&#1088;&#1077;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103; &#1085;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072; pw'</span>);
    sp2 = subplot(2,1,2); plot(tim(1:NSF),unwPd_cpw); grid <span class="string">on</span>;
    xlabel(<span class="string">"t,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"Phase disc"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    title(sp2,<span class="string">'&#1056;&#1072;&#1079;&#1088;&#1099;&#1074;&#1085;&#1072;&#1103; &#1085;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1072;&#1103; &#1092;&#1072;&#1079;&#1072; pw'</span>);
</pre><h2 id="19">&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1080; &#1101;&#1085;&#1077;&#1088;&#1075;&#1080;&#1103; &#1086;&#1095;&#1080;&#1097;&#1077;&#1085;&#1085;&#1086;&#1081; &#1087;&#1091;&#1083;&#1100;&#1089;&#1086;&#1074;&#1086;&#1081; &#1074;&#1086;&#1083;&#1085;&#1099;</h2><p>&#1054;&#1094;&#1077;&#1085;&#1082;&#1072; &#1087;&#1077;&#1088;&#1074;&#1086;&#1081; &#1087;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1076;&#1085;&#1086;&#1081; &#1085;&#1077;&#1087;&#1088;&#1077;&#1088;&#1099;&#1074;&#1085;&#1086;&#1081; &#1082;&#1086;&#1084;&#1087;&#1086;&#1085;&#1077;&#1085;&#1090;&#1099; &#1085;&#1072;&#1082;&#1086;&#1087;&#1083;&#1077;&#1085;&#1085;&#1086;&#1081; &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1086;&#1081; &#1092;&#1072;&#1079;&#1099; &#1089; &#1087;&#1086;&#1084;&#1086;&#1097;&#1100;&#1102; &#1089;&#1086;&#1093;&#1088;&#1072;&#1085;&#1103;&#1102;&#1097;&#1077;&#1081; &#1092;&#1086;&#1088;&#1084;&#1091; &#1082;&#1091;&#1089;&#1086;&#1095;&#1085;&#1086; &#1082;&#1091;&#1073;&#1080;&#1095;&#1077;&#1089;&#1082;&#1086;&#1081; &#1080;&#1085;&#1090;&#1088;&#1077;&#1088;&#1087;&#1086;&#1083;&#1103;&#1094;&#1080;&#1080; &#1087;&#1086;&#1083;&#1080;&#1085;&#1086;&#1084;&#1072;&#1084;&#1080; &#1069;&#1088;&#1084;&#1080;&#1090;&#1072;</p><pre class="codeinput">    t = 1:NSF;
    p = pchip(t,unwPc_cpw);
    insF_cpw(1) = 0.0;
    <span class="keyword">for</span> i=2:NSF
        insF_cpw(i) = p.coefs(i-1,3)/pi2/dt; <span class="comment">% &#1084;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; &#1085;&#1077;&#1087;&#1088;&#1077;&#1088;&#1099;&#1074;&#1085;&#1086;&#1081; &#1082;&#1086;&#1084;&#1087;&#1086;&#1085;&#1077;&#1085;&#1090;&#1099; cpw, &#1043;&#1094;</span>
    <span class="keyword">end</span>
    insF_cpw(1) = insF_cpw(2);
    insF_cpw = insF_cpw';
    smo_insF_cpw = smoothdata(insF_cpw, <span class="string">'rloess'</span>, 0.03*NSF);
    <span class="comment">% smo_insF_cpw = smooth(insF_cpw,0.03*NSF,'rloess');</span>
    res_insF_cpw = insF_cpw-smo_insF_cpw; <span class="comment">% &#1082;&#1074;&#1072;&#1076;&#1088;&#1072;&#1090; &#1086;&#1089;&#1090;&#1072;&#1090;&#1082;&#1072;</span>
    dev_insF_cpw = smoothdata(res_insF_cpw.^2, <span class="string">'rloess'</span>, 0.03*NSF);
    <span class="comment">% dev_insF_cpw = smooth(res_insF_cpw.^2,0.03*NSF,'rloess');</span>
    std_insF_cpw = abs(sqrt(dev_insF_cpw));
    figure(<span class="string">'name'</span>,<span class="string">'Frequencie and energy pulse wave'</span>); clf;
    sp1 = subplot(2,1,1); plot(tim(1:NSF),insF_cpw); hold <span class="string">on</span>;
    plot(tim(1:NSF),smo_insF_cpw,<span class="string">'Color'</span>,<span class="string">'r'</span>,<span class="string">'LineWidth'</span>,0.8); hold <span class="string">on</span>;
    <span class="comment">% plot(tim(1:NSF),std_insF_cpw);</span>
    xlabel(<span class="string">"t,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"insF,Hz"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    grid <span class="string">on</span>; title(sp1,<span class="string">'&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1095;&#1072;&#1089;&#1090;&#1086;&#1090;&#1072; cpw'</span>); ylim([1.0 3.0]);
    sp2 = subplot(2,1,2); plot(tim(1:NSF),insE_cpw.^2);
    xlabel(<span class="string">"t,s"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>); ylabel(<span class="string">"insE^2"</span>,<span class="string">'interp'</span>,<span class="string">'none'</span>);
    grid <span class="string">on</span>; title(sp2,<span class="string">'&#1052;&#1075;&#1085;&#1086;&#1074;&#1077;&#1085;&#1085;&#1072;&#1103; &#1101;&#1085;&#1077;&#1088;&#1075;&#1080;&#1103; cpw'</span>);
    save(Path+Name+<span class="string">"_nc"</span>+<span class="string">".mat"</span>);
</pre><pre class="codeinput"><span class="keyword">end</span>
</pre><p class="footer"><br><a href="https://www.mathworks.com/products/matlab/">Published with MATLAB&reg; R2018a</a><br></p></div><!--
##### SOURCE BEGIN #####
function chss2(pw, Path, Name)
%     dt=1/30;     % интервал временной дискретизации
    fmin=0.15; % нижняя граница - частотный диапазон дыхательной волны
    dt=1/30;     % интервал временной дискретизации
    Nmed=1/(dt*fmin); % апертура фильтра
    PathHR=Path+replace(Name,"_nc","")+"_rPPG_output.csv";
    hr = LoadHR(PathHR);
    % PathHR=Path+replace(Name,"_nc","")+"_Mobi_RR-intervals.rr";
    % hr = LoadRR(PathHR);

    %% Cегменты pw
    N   = length(pw); % количество отсчетов pw
    win = 1024;
    res = N-win*floor(N/win);
    nPart = 20; % количество долей res
    res = floor(res/nPart); overlap = (win-res)/win;
    S = 1; Imin = 1; Imax = win;
    while Imax<=N
        ns(S) = S; % номер текущего сегмента pw
        Imin  = Imin+res;
        Imax  = Imax+res;
        S     = S+1;
    end
    S = S-1; % кол-во перекрывающихся сегментов pw в пределах N
    NSF = win+res*(S-1); % номер финального отсчета финального сегмента <= N
    for j=1:S
        for i=1:win
            k = (j-1)*res;
            spw(i,j) = pw(k+i); % текущий сегмент pw длинною win 
        end
    end
    %% Set general parameters
    cad = 30;      % 30 кадров/сек
    dt  = 1.0/cad; % интервал дискретизации времени, сек
    tim(1) = 0.0;
    for i=2:N
        tim(i) = tim(i-1)+dt; % время в секундах
    end
    % tim = tim';
    ns  = (1:S)'; % номера сегментов pw
    % fmp=zeros(S,1);
    for j=1:S % цикл по сегментам pw
        %    L(j) = floor(cad/fmp(j)); % кол-во отсчетов основного тона pw
        L(j) = floor(cad/1.5); % кол-во отсчетов основного тона pw
    end
    L = L';
    K = 5; % кол-во периодов для параметра вложения
    M = K*max(L); % параметр вложения в траекторное пространство 
    %% SSA- анализ сегментов pw
    nET = 4;   % кол-во сингулярных троек для сегментов pw
    for j=1:S  % цикл по сегментам
        %% SSA time series
        %    M = K*L(j); % параметр вложения в траекторное пространство
        [C,LBD,RC] = SSA(win,M,spw(:,j),nET);
        %% Estimation of the spw(:,j) reconstructed with the pair of RC   
        sET12(:,j) = sum(RC(:,1:2),2);   
        %    sET34(:,j) = sum(RC(:,3:4),2);   
        %% Compare reconstruction and original time series
        if j==100 % номер сегмента pw для визуализации
            figure('name','Covariance matrix'); clf;
            imagesc(C); axis square; set(gca,'clim',[-1 1]); colorbar;
            figure('name','Eigenvalues'); clf; plot(LBD,'o-');
            figure('name','Original time series and reconstruction'); clf;
            plot(tim(1:win),spw(:,j),'b-',tim(1:win),sET12(:,j),'r-');
            legend('Original','sET12'); xlabel("t,s",'interp','none'); ylabel("sET",'interp','none');
        end
    end
    %% Оценка АКФ сингулярных троек для сегментов pw
    lag  = floor(win/10); % наибольший лаг АКФ <= win/10
    lagS = 2*lag;
    for j=1:S
        Acf_sET12(:,j) = AcfMed(lagS,win,sET12(:,j)); % нормированная АКФ j-го сегмента
        %    Acf_sET12(:,j) = autocorr(sET12(:,j),'NumLags',lag); % нормированная АКФ j-го сегмента
    end
    %% Визуализация АКФ сингулярных троек для сегментов pw
    lgl = 1:lag; % сетка 3D-графика АКФ
    Time=0:dt:lag*dt-dt;
    figure('name','АКФ сингулярных троек sET12 сегментов pw'); clf;
    % mesh(ns,lgl,Acf_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;
    % xlabel("ns",'interp','none'); ylabel("lag",'interp','none');
    mesh(ns,Time,Acf_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;
    xlabel("ns",'interp','none'); ylabel("lag,s",'interp','none');
    zlabel("Acf",'interp','none'); grid on;
    %% Огибающая по критерию локальных максимумов abs(acf_sET12)
    for j=1:S % цикл по сегментам АКФ
        absTS = abs(Acf_sET12(:,j));
        AT1   = absTS(1);
        AT2   = absTS(2);
        maxTS = zeros(lag,1); maxTS(1) = AT1;
        maxN  = zeros(lag,1); maxN(1)  = 1;
        Nmax = 1;
        for m=3:lag
            AT3 = absTS(m);
            if (AT1<=AT2)&&(AT2>=AT3)
                Nmax = Nmax+1; % номер очередного узла интерполяции (счетчик максимумов)
                maxN(Nmax) = m-1; % номер очередного максимума для ряда absTS
                maxTS(Nmax) = AT2; % отсчет очередного узла интерполяции
            end
            AT1 = AT2;
            AT2 = AT3;
        end
        Nmax = Nmax+1; % количество узлов интерполяции
        maxN(Nmax)  = lag; % номер отсчета absTS финального узла интерполяции
        maxTS(Nmax) = absTS(lag); % отсчет absTS финального узла интерполяции
        NumMax = maxN(1:Nmax); % номера максимумов ВР absTS
        % Интерполяция огибающей АКФ
        % 'pchip','cubic','v5cubic','makima','spline'
        EnvAcf_sET12(:,j) = interp1(NumMax,maxTS(1:Nmax),lgl,'pchip');
        AcfNrm_sET12(:,j) = Acf_sET12(1:lag,j)./EnvAcf_sET12(:,j); % нормированные АКФ
    end
    figure('name','Нормированные АКФ сингулярных троек sET12 сегментов pw'); clf;
    % mesh(ns,lgl,AcfNrm_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;
    % xlabel("ns",'interp','none'); ylabel("lag",'interp','none');
    mesh(ns,Time,AcfNrm_sET12(1:lag,:),'FaceAlpha',0.5,'FaceColor','flat'); colorbar;
    xlabel("ns",'interp','none'); ylabel("lag,s",'interp','none');
    zlabel("Acf_Nrm",'interp','none'); grid on;
    %% Мгновенная частота нормированной АКФ сингулярных троек sET12 для сегментов pw
    pi2 = 2.0*pi;
    for j=1:S % цикл по сегментам АКФ
        PhaAcfNrm = abs(acos(AcfNrm_sET12(:,j))); % мгновенная фаза
        pAcf = pchip(lgl,PhaAcfNrm); % коэффициенты интерполянта pchip
        for m=2:lag
            FrcAcfNrm(m) = abs(pAcf.coefs(m-1,3))/pi2/dt; % мгновенная частота нормиров-ой АКФ, Гц        
        end
        FrcAcfNrm(1) = FrcAcfNrm(2); 
        %    FrcAcfNrm = abs(diff(PhaAcfNrm))/pi2/dt; % мгновенная частота нормиров-ой АКФ, Гц
        insFrc_AcfNrm(j) = median(FrcAcfNrm); % средняя мгновенная частотта j-го сегмента pw 
    end
    
    disp("Апертура фильтра для insFrc_AcfNrm: " + Nmed);  
%     insFrc_AcfNrm=medfilt1(insFrc_AcfNrm, 5);
      
    smo_insFrc_AcfNrm = smoothdata(insFrc_AcfNrm, 'rloess', 0.25*S); % smo_insFrc_AcfNrm = smooth(insFrc_AcfNrm,0.25*S,'rlowess');
    figure('name','Частоты нормир-ой АКФ сингуляр-х троек сегментов pw','Position', [0 0 1400 800]); clf;
%             insFrc_AcfNrm=medfilt1(insFrc_AcfNrm,Nmed);

%     p1 = plot(ns,insFrc_AcfNrm,'b','LineWidth',0.8); hold on;
%     plot(ns,smo_insFrc_AcfNrm,'r','LineWidth',0.8); grid on;
%     xlabel("ns",'interp','none'); ylabel("insFrc_AcfNrm,Hz",'interp','none');
%     title("Частоты нормир-ой АКФ сингуляр-х троек сегментов pw");
% %     legend(p1,'sET12');
%     if length(hr)>100
%         ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';
%         % yyaxis right; 
%         plot(ns_hr,hr./60,'black'); ylabel("HR[bpm]",'interp','none');
%         % legend(p1,'insFrc_AcfNrm','rloess','HR[bpm]');
%         hr_med=medfilt1(hr,Nmed*5);
%         hr_diff_med=hr-hr_med;
%         plot(ns_hr,hr_med./60,'cyanREPLACE_WITH_DASH_DASH');
%         plot(ns_hr,hr_diff_med./60,'magenta'); %ylabel("HR[bpm]",'interp','none');
%         legend('insFrc AcfNrm','rloess','HR','HR[medfilt]','HR[HR-medfilt1]')
%     end
    %!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    subplot(1,3,[1 2]);
    plot(ns,insFrc_AcfNrm,'b','LineWidth',0.8); hold on;
    plot(ns,smo_insFrc_AcfNrm,'r','LineWidth',0.8); grid on;
    xlabel("ns",'interp','none'); ylabel("insFrc_AcfNrm,Hz",'interp','none');
    title("Частоты нормир-ой АКФ сингуляр-х троек сегментов pw");
%     legend(p1,'sET12');
    if length(hr)>100
        ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';
        % yyaxis right; 
        plot(ns_hr,hr./60,'black'); ylabel("HR[bpm]",'interp','none');
        % legend(p1,'insFrc_AcfNrm','rloess','HR[bpm]');
        hr_med=medfilt1(hr,Nmed*5);
        hr_diff_med=hr-hr_med;
        plot(ns_hr,hr_med./60,'cyanREPLACE_WITH_DASH_DASH');
        
        legend('insFrc AcfNrm','rloess','HR','HR[medfilt]'); 

        
        
    subplot(1,3,3);
%             [outs, lower_prct, upper_prct] = 
            RaznFilter(insFrc_AcfNrm, [1 99]); 
%         plot((insFrc_AcfNrm-medfilt1(insFrc_AcfNrm, 5)),'blackREPLACE_WITH_DASH_DASH'); hold on;
%         plot(rmoutliers_emulated(insFrc_AcfNrm, [10 90])./60,'red'); 
%         plot(filloutliers(insFrc_AcfNrm,"next")./60,'red'); 
        
%         plot(outs, 'blue');
%         line('XData', [0 200], 'YData', [lower_prct lower_prct], 'Color','red','LineStyle','REPLACE_WITH_DASH_DASH');
%         line('XData', [0 200], 'YData', [upper_prct upper_prct],'Color','red','LineStyle','REPLACE_WITH_DASH_DASH');


        ylabel("Hz",'interp','none'); xlabel("ns",'interp','none'); title("Первая разность"); grid on;
        legend('Первая разность','down','up','Интерполяция', 'Location', 'east');
        
%         разность по исходным данным контактного способа определения
%         plot(ns_hr,hr_diff_med./60,'magenta'); %ylabel("HR[bpm]",'interp','none');
%         legend('HR[HR-medfilt1]');  ylabel("HR[bpm]",'interp','none'); xlabel("ns",'interp','none'); grid on;
    end

    %% Оценки СПМ сингулярных троек для сегменов pw
    smopto = 3; % параметр сглаживания периодограммы Томсона
    for j=1:S
        %    disp(spw(:,j));
        pto_sET12(:,j) = periodogram(spw(:,j),blackmanharris(win),win); % Блэкмана-Харриса
        pto_sET12(:,j) = pmtm(sET12(:,j),smopto,win); % периодограмма Томсона
    end
    %% Визуализация СПМ сингулярных троек сегменов pw
    fmi  = 40.0/60.0;   % частота среза для 40 уд/мин (0.6667 Гц)
    fma  = 240.0/60.0;  % частота среза для 240 уд/мин (4.0 Гц)
    Nf   = 1+win/2;     % кол-во отсчетов частоты
    df   = cad/(win-1); % интервал дискретизации частоты, Гц
    Fmin = fmi-10*df; Fmax = fma+10*df; % частота в Гц
    f(1) = 0.0;
    for i=2:Nf
        f(i) = f(i-1)+df; % частота в герцах
        if abs(f(i)-Fmin)<=df
            iGmin = i;
        end
        if abs(f(i)-Fmax)<=df
            iGmax = i;
        end
    end
    for i=1:iGmax
        fG(i) = f(i); % сетка частот 3D-графика
    end
    f = f';
    figure('name','Периодограмма Томсона sET12 сегментов pw'); clf;
    mesh(ns,fG(iGmin:iGmax),pto_sET12(iGmin:iGmax,:),'FaceAlpha',0.5,'FaceColor','flat');
    colorbar; grid on;
    xlabel("ns",'interp','none'); ylabel("f,Hz",'interp','none'); zlabel("P(f)",'interp','none');
    %% Оценки средних частот основного тона сингулярных троек сегментов pw
    for j=1:S
        [B,I] = sort(pto_sET12(:,j),'descend');
        pto_fMAX12(j) = f(I(1)); % I(1) - индекс частоты(Гц) максимума pto_sET12(:,j)
    end
    pto_fMAX12 = pto_fMAX12';
    smo_pto_fMAX12 = smoothdata(pto_fMAX12,'rloess',0.3*S); 
    % smo_pto_fMAX12 = smooth(pto_fMAX12,0.3*S,'rloess');
    figure('name','Частоты основного тона sET сегментов pw','Position', [800 0 800 600]); clf;
%             pto_fMAX12=medfilt1(pto_fMAX12,Nmed);
    p=plot(ns,pto_fMAX12,'b'); hold on;
    plot(ns,smo_pto_fMAX12,'r','LineWidth',0.8); grid on;
    xlabel("ns",'interp','none'); ylabel("fMAX,Hz",'interp','none');
    title("Частоты основного тона sET сегментов pw");
    if length(hr)>100
        ns_hr = (length(ns)/length(hr) : length(ns)/length(hr) : length(ns))';
        % yyaxis right;
        plot(ns_hr,hr./60,'black'); ylabel("HR[bpm]",'interp','none');
        % legend(p,'pto_fMAX12','rloess','HR[bpm]');
        hr_med=medfilt1(hr,Nmed*5);
        hr_diff_med=hr-hr_med;
        plot(ns_hr,hr_med./60,'cyanREPLACE_WITH_DASH_DASH');
        plot(ns_hr,hr_diff_med./60,'magenta'); %ylabel("HR[bpm]",'interp','none');
        legend('pto sET12','smoothdata','HR[bpm]','medfilt1','hr-medfilt1')
    end
    saveas(p,Path+Name+'_ЧСС_sET.png');

    %% Агрегирование сегментов очищенной пульсовой волны cpw
    [NumS,cpw_avr,cpw_med,cpw_iqr] = wav(NSF,S,win,res,sET12);
    % figure('name','Pulse wave'); clf;
    % plotwave(1,NSF,tim,cpw_avr,cpw_med,cpw_iqr);
    %% Накопленная мгновенная фаза cpw
    % cpw = cpw_avr; % оценка очищенной пульсовой волны
    cpw = cpw_med; % оценка очищенной пульсовой волны
    cutoff = pi; pi2 = 2.0*pi;
    H_cpw = hilbert(cpw);
    insE_cpw = abs(H_cpw); % мгновенная огибающая
    unwPha = unwrap(angle(H_cpw),cutoff); % накопленная мгновенная фаза
    % Непрерывная-(с) и разрывная-(d) компоненты накопленной мгновенной фазы
    unwPc_cpw(1) = unwPha(1); unwPd_cpw(1) = 0.0;
    for i=2:NSF
        dif = unwPha(i)-unwPha(i-1);
        unwPc_cpw(i) = unwPc_cpw(i-1); % непрерывная
        unwPd_cpw(i) = unwPd_cpw(i-1); % разрывная 
        if dif>=0.0
            unwPc_cpw(i) = unwPc_cpw(i)+dif;
        else
            unwPd_cpw(i) = unwPd_cpw(i)+dif+pi2;
        end
    end
    unwPc_cpw = unwPc_cpw'; unwPd_cpw = unwPd_cpw';
    figure('name','Unwrape phase pulse wave'); clf;
    sp1 = subplot(2,1,1); plot(tim(1:NSF),unwPc_cpw); grid on;
    xlabel("t,s",'interp','none'); ylabel("Phase cont",'interp','none');
    title(sp1,'Непрерывная накопленная фаза pw');
    sp2 = subplot(2,1,2); plot(tim(1:NSF),unwPd_cpw); grid on; 
    xlabel("t,s",'interp','none'); ylabel("Phase disc",'interp','none');
    title(sp2,'Разрывная накопленная фаза pw');
    %% Мгновенная частота и энергия очищенной пульсовой волны
    % Оценка первой производной непрерывной компоненты накопленной мгновенной фазы
    % с помощью сохраняющей форму кусочно кубической интрерполяции полиномами Эрмита
    t = 1:NSF;
    p = pchip(t,unwPc_cpw);
    insF_cpw(1) = 0.0;
    for i=2:NSF
        insF_cpw(i) = p.coefs(i-1,3)/pi2/dt; % мгновенная частота непрерывной компоненты cpw, Гц
    end
    insF_cpw(1) = insF_cpw(2);
    insF_cpw = insF_cpw';
    smo_insF_cpw = smoothdata(insF_cpw, 'rloess', 0.03*NSF); 
    % smo_insF_cpw = smooth(insF_cpw,0.03*NSF,'rloess');
    res_insF_cpw = insF_cpw-smo_insF_cpw; % квадрат остатка 
    dev_insF_cpw = smoothdata(res_insF_cpw.^2, 'rloess', 0.03*NSF); 
    % dev_insF_cpw = smooth(res_insF_cpw.^2,0.03*NSF,'rloess');
    std_insF_cpw = abs(sqrt(dev_insF_cpw));
    figure('name','Frequencie and energy pulse wave'); clf;
    sp1 = subplot(2,1,1); plot(tim(1:NSF),insF_cpw); hold on;
    plot(tim(1:NSF),smo_insF_cpw,'Color','r','LineWidth',0.8); hold on;
    % plot(tim(1:NSF),std_insF_cpw);
    xlabel("t,s",'interp','none'); ylabel("insF,Hz",'interp','none');
    grid on; title(sp1,'Мгновенная частота cpw'); ylim([1.0 3.0]);
    sp2 = subplot(2,1,2); plot(tim(1:NSF),insE_cpw.^2); 
    xlabel("t,s",'interp','none'); ylabel("insE^2",'interp','none');
    grid on; title(sp2,'Мгновенная энергия cpw');
    save(Path+Name+"_nc"+".mat");
end
##### SOURCE END #####
--></body></html>